/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package prop;


import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *
 * @author David Sembroiz y Jose Maria Palacio
 */
public class DataManager {

    private static final int N = 15;
    private String namerank;
    private int ind;
    private String linea;
    private FileInputStream archivo;


    public DataManager(String name) {
        namerank = name;
        ind = -1;
    }


    public void guardarRanking(Posicion[] v) {
        FileOutputStream fout;
        try {
            fout = new FileOutputStream (namerank);
            for (int i = 0; i < N && v.length > 0; ++i) {
                new PrintStream(fout).println(v[i].nombre);
                new PrintStream(fout).println(v[i].puntuacion);
                new PrintStream(fout).println(v[i].fecha);
            }
            fout.close();
        }
        catch (IOException e) {
            System.err.println("Unable to write to file");
            System.exit(-1);
        }
    }


    public Posicion[] cargarRanking() {
        Posicion[] v = new Posicion[N];
        inicializar(v);
        try {
            archivo = new FileInputStream(namerank);
            for (int i = 0; i < N; ++i) {
                v[i].nombre = new DataInputStream(archivo).readLine();
                String s = new DataInputStream(archivo).readLine();
                v[i].puntuacion = Integer.parseInt(s);
                v[i].fecha = new DataInputStream(archivo).readLine();
            }
            archivo.close();
        }
        catch (IOException e) {
            guardarRanking(v);
        }
        Posicion[] a = listarRanking(v);
        return a;
    }
    private void inicializar(Posicion[] v) {
        for (int i = 0; i < N; ++i) {
            Posicion aux = new Posicion();
            aux.puntuacion = -1;
            aux.nombre = "";
            aux.fecha = getDateTime();
            v[i] = aux;
        }
    }

    private Posicion[] listarRanking(Posicion[] v) {
        int cont = 0;
        int i = 0;
        while(i < N && v[i++].puntuacion != -1) {
            ++cont;
        }
        Posicion[] w = new Posicion[cont];
        for (i = 0; i < cont; ++i) {
            w[i] = v[i];
        }
        return w;
    }
    private String getDateTime() {
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        Date date = new Date();
        return dateFormat.format(date);
    }

    public String leerNombre() {
        if (ind == -1) {
            ind = 0;
            linea = new String();
            try {
                archivo = new FileInputStream(namerank);
            }
            catch (IOException e) {
                System.err.println("Error al abrir el archivo");
                System.exit(-1);
            }
        }
        if (ind+1 >= linea.length() || linea.isEmpty()) {
            ind = 0;
            try {
                linea = new DataInputStream(archivo).readLine();
            }
            catch (IOException e) {
                System.err.println("Error al leer el archivo");
                return "FIN";
            }
            if (linea == null) {
                try {
                    archivo.close();
                    ind = -1;
                } catch (IOException ex) {
                    System.err.println("Error al cerrar el archivo");
                }
                return "FIN";
            }
        }
        StringBuilder nombre = new StringBuilder();
        while (linea.charAt(ind) != '(') {
            nombre.append(linea.charAt(ind));
            ++ind;
            if (nombre.toString().equals(":")) {
                ++ind;
                return nombre.toString();
            }
        }
        ++ind;
        return nombre.toString();
    }

    public String leerParametro() {
        StringBuilder param = new StringBuilder();
        if (linea.charAt(ind-1) == ')') {
            ++ind;
            return "ULTIMOPARAMETRO";
        }
        while (linea.charAt(ind) != ',' && linea.charAt(ind) != ')') {
            param.append(linea.charAt(ind));
            ++ind;
        }
        ++ind;
        return param.toString();
    }
}
